// 类
// 继承
// 修饰符
export {};

// 父类 ｜ 基类
class Person {
  // 实例属性
  // 公共属性： 随意访问
  public name: string;
  public age: number;
  public sex: string;

  // 保护属性： 自己以及子类可以访问
  protected money = 100000;
  // 私有属性:  自己访问
  private litterMoney = 200;

  sayLitterMoney() {
    return this.litterMoney;
  }

  // 构造器
  public constructor(name: string, age: number = 18, sex: string = "男") {
    this.name = name;
    this.age = age;
    this.sex = sex;
  }

  // 原型方法: 被实例共享
  public say() {
    console.log(`我是${this.name}, 今年${this.age}岁了, 性别${this.sex}`);
  }

  // 静态属性
  static uu = "哈哈";
  // 静态方法
  static say() {
    console.log(Person.uu);
  }
}

// 子类 ｜ 派生类
class Man extends Person {
  constructor(name: string, age: number) {
    super(name, age, "男");

    this.money -= 50000;
  }
}

// 子类 ｜ 派生类
class WoMan extends Person {
  constructor(name: string, age: number) {
    super(name, age, "女");

    // this.litterMoney
  }
}

const m1 = new Man("张三", 20);
const w1 = new WoMan("小丽", 18);

m1.say();
w1.say();

// m1.money

// w1.litterMoney

const s = w1.sayLitterMoney();
console.log(s);
